package com.escool.controller;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.escool.model.SgUsuarios;
import com.escool.model.SgUsuariosHasSgRoles;
import com.escool.model.TbEncargado;
import com.escool.model.TbResponsable;
import com.escool.model.TbSede;
import com.escool.service.EncargadoService;
import com.escool.service.FindService;
import com.escool.service.PagadorService;
import com.escool.service.SgUsuarioService;



@Controller
public class PagadorController {
	
	@Autowired
	PagadorService pagadorService;
	
	@Autowired
	FindService findService;
	
	@Autowired
	EncargadoService encargadoService;
	
	@Autowired
	SgUsuarioService userService;
	
	@RequestMapping("showPagador")
	public String listNiveles(Map<String, Object> map){
		map.put("tbResponsable", new TbResponsable());
		map.put("pagadorList", pagadorService.listTbResponsable());
		return "/ingresoPagador";
	}
	
	@RequestMapping(value = "addPagador", method = RequestMethod.POST)
	public String addNiveles(@ModelAttribute("tbResponsable") @Valid TbResponsable tbResponsable, BindingResult result){
		if (!result.hasErrors()) {
			
			pagadorService.addPagador(tbResponsable);
			//Crear usuario
			SgUsuarios user = new SgUsuarios();
			user.setNombreUsuario(tbResponsable.getEmailResponsable());
			user.setPassword(tbResponsable.getEmailResponsable());
			user.setNumeroEmpleado(tbResponsable.getEmailResponsable());
			userService.addUsuarios(user);
			//Enrolar usuario alumno
			SgUsuariosHasSgRoles role = new SgUsuariosHasSgRoles();
			role.setSgUsuarios(user);
			role.setSgRoles(userService.findRole(4));
			userService.addUsarioRol(role);
			System.out.println("Encargado " + role.getSgUsuarios().getNombreUsuario() + " con rol " + role.getSgRoles().getNombreRol());
			return "redirect:/showPagador";
		}
		return "";
	}
	
	@RequestMapping(value = "editPagador", method = RequestMethod.POST)
	public String editNiveles(@ModelAttribute("tbResponsable") @Valid TbResponsable tbResponsable, BindingResult result){
		if (!result.hasErrors()) {
			
			pagadorService.edit(tbResponsable);
			return "redirect:/showPagador";
		}
		return "";
	}
	
	@RequestMapping(value = "deletePagador", method = RequestMethod.POST)
	public String delNiveles(@ModelAttribute("tbResponsable") @Valid TbResponsable tbResponsable, BindingResult result){
		if (!result.hasErrors()) {
			
			pagadorService.delete(tbResponsable.getIdResponsable());
			return "redirect:/showPagador";
		}
		return "";
	}
	
		
	/*
			esta es la seccion del designado 
	*/
		
	@RequestMapping(value = "showDesignado_2", method = RequestMethod.POST)
	public String showDesignado_2(@ModelAttribute("tbResponsable") @Valid TbResponsable tbResponsable, BindingResult result,Map<String, Object> map){
		TbEncargado enc = new TbEncargado();
		enc.setTbResponsable(pagadorService.findById(tbResponsable.getIdResponsable()));		 
			map.put("tbEncargado", enc);
			map.put("encargadoList", encargadoService.listTbEncargado(tbResponsable.getIdResponsable()));
			map.put("parentescoList", findService.listTbParentesco());
			return "/ingresoDesignado";					
	}
	
	
	@RequestMapping("showDesignado")
	public String showDesignado(Map<String, Object> map,HttpServletRequest request){
		String id = request.getParameter("idEncargado");
		TbEncargado enc = new TbEncargado();
		enc.setTbResponsable(pagadorService.findById(Integer.parseInt(id)));		 
			map.put("tbEncargado", enc);
			map.put("encargadoList", encargadoService.listTbEncargado(Integer.parseInt(id)));
			map.put("parentescoList", findService.listTbParentesco());
			return "/ingresoDesignado";					
	}
	
	@RequestMapping(value = "addEncargado", method = RequestMethod.POST)
	public String addEncargado(@ModelAttribute("tbEncargado") @Valid TbEncargado tbEncargado, BindingResult result){
		if (!result.hasErrors()) {		
			
			encargadoService.addTbEncargado(tbEncargado);
			return "redirect:/showDesignado?idEncargado="+tbEncargado.getTbResponsable().getIdResponsable();
		}
		return "";
	}
	
	
	@RequestMapping(value = "editEncargado", method = RequestMethod.POST)
	public String editEncargado(@ModelAttribute("tbEncargado") @Valid TbEncargado tbEncargado, BindingResult result){
		if (!result.hasErrors()) {		
			
			encargadoService.editTbEncargado(tbEncargado);
			return "redirect:/showDesignado?idEncargado="+tbEncargado.getTbResponsable().getIdResponsable();
		}
		return "";
	}
	
	
	@RequestMapping(value = "delEncargado", method = RequestMethod.POST)
	public String delEncargado(@ModelAttribute("tbEncargado") @Valid TbEncargado tbEncargado, BindingResult result){
		if (!result.hasErrors()) {		
			
			encargadoService.delTbEncargado(tbEncargado.getIdEncargado());
			return "redirect:/showDesignado?idEncargado="+tbEncargado.getTbResponsable().getIdResponsable();
		}
		return "";
	}
	
		
}
